class Solution {
    public:
        int lenLongestFibSubseq(vector<int>& arr) {
            int n = arr.size();
            vector<vector<int>> dp(n,vector<int>(n,2));//dp[i][j] 表示以ij位置为结尾的最长xx子序列长度
            unordered_map<int,int> hash; //将元素和下标建立映射关系
            for(int i = 0 ; i < n ; i++)    hash[arr[i]] = i;
            int ret = 2;
            for(int i = 1 ; i < n ; i++){
                for(int j = i+1 ; j <n ; j ++){
                    if(hash.count(arr[j] - arr[i])){
                        int k = hash[arr[j]-arr[i]];
                        if(k < i)   dp[i][j] = dp[k][i] + 1;
                        //else //
                    }else{
                        //
                    }
                    ret = max(ret,dp[i][j]);
                }
            }
            return ret==2 ? 0 : ret;
        }
    };